package com.example.demo.service.imp;

import com.example.demo.controller.data.ReturnData;
import com.example.demo.controller.vo.RegisterUser;
import com.example.demo.dao.AdminDao;
import com.example.demo.dao.UserDao;
import com.example.demo.entity.Admin;
import com.example.demo.entity.User;
import com.example.demo.service.AdminService;
import com.example.demo.utils.TokenUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 管理员实现类
 */
@Service
public class AdminServiceImp implements AdminService {
    @Resource
    AdminDao adminDao;
    @Resource
    RedisTemplate redisTemplate;
    @Override
    public ReturnData login(String user, String pwd) {
        //调用数据库操作类，查找对应表里有没有数据匹配
        List<Admin> users = adminDao.findByUsernameAndPassword(user, pwd);
        if (users.size() > 0) {//如果有，登陆成功
            HashMap<String, Object> map = new HashMap<>();
            map.put("token", TokenUtils.getToken(users.get(0).getUsername()));
            users.get(0).setPassword("");
            map.put("userInfo", users.get(0));

            User temp = new User();
            temp.setId( users.get(0).getId());
            temp.setUsername( users.get(0).getUsername());
            temp.setPassword( users.get(0).getPassword());
            temp.setAvatar( users.get(0).getAvatar());
            temp.setNickname( users.get(0).getNickname());


            redisTemplate.opsForValue().set(users.get(0).getUsername(), temp);//写进缓存
//            redisTemplate.opsForValue().get(users.get(0).getUsername());//读缓存
            return ReturnData.ok("登陆成功", map);
        } else {//查找不到对应的用户数据
            return ReturnData.error("用户名密码错误");//返回空，此时要在前端提示登录失败
        }
    }
    @Resource
    UserDao userDao;
    @Override
    public ReturnData getUserList(int page, int pageSize,String nickname) {
        /**
         * 查找数据库获取圈子数据
         */
        List<Map<String,Object>> list = userDao.getList((page - 1) * pageSize, pageSize,nickname);

        long num = userDao.count();//获取表里面所有数据的条数
        long total = 0;//页码数
        if(num%pageSize==0){
            total=num/pageSize;
        }else{
            total=num/pageSize+1;
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("total", total);
        map.put("list", list);
        return ReturnData.ok("成功",map);
    }

    @Override
    public ReturnData deleteUser(int id) {
        User user = userDao.findById(id).get();
        if(user==null){
            return ReturnData.error("没有这个用户");
        }
        userDao.delete(user);
        return ReturnData.ok("删除成功");
    }

    @Override
    public ReturnData updateUserInfo(RegisterUser registerUser) {
        User user;
        if(registerUser.getId()==0){//新增用户
            user = new User();
            if (!StringUtils.hasText(registerUser.getUsername())) {//如果没有数据
                return ReturnData.error("请输入用户名");
            }
            if (!StringUtils.hasText(registerUser.getPassword())) {//如果没有数据
                return ReturnData.error("请输入密码");
            }
            if (!StringUtils.hasText(registerUser.getEmail())) {//如果没有数据
                return ReturnData.error("请输入邮箱");
            }
            user.setUsername(registerUser.getUsername());
            user.setPassword(registerUser.getPassword());
            user.setEmail(registerUser.getEmail());
            user.setRegister_date(new Timestamp(System.currentTimeMillis()));
        }else{//编辑用户
            user = userDao.findById(registerUser.getId()).get();//根据用户ID查用户信息
        }

        if (!StringUtils.hasText(registerUser.getNickname())) {//如果没有数据
            return ReturnData.error("请输入昵称");
        }
        if (!StringUtils.hasText(registerUser.getPhone())) {//如果没有数据
            return ReturnData.error("请输入手机");
        }
        if (registerUser.getPhone().length()!=11) {//如果没有数据
            return ReturnData.error("手机格式有误");
        }
//        if (!StringUtils.hasText(registerUser.getSgin())) {//如果没有数据
//            return ReturnData.error("请输入签名");
//        }
        if (registerUser.getSex()==0) {//如果没有数据
            return ReturnData.error("请选择性别");
        }
        if (!StringUtils.hasText(registerUser.getAvatar())) {//如果没有数据
            return ReturnData.error("请上传头像");
        }
        //修改实体类的数据
        user.setNickname(registerUser.getNickname());
        user.setPhone(registerUser.getPhone());
        user.setSgin(registerUser.getSgin());
        user.setSex(registerUser.getSex());
        user.setAvatar(registerUser.getAvatar());
//        user.setRegister_date();
        userDao.save(user);//改完存回数据库
        return ReturnData.ok("修改成功");
    }
}
